home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 3 / Gold Medal Software - Volume 3 (Gold Medal) (1994).iso / prog / cenvi29.arj / DOS_ECHO.CMD < prev    next >
OS/2 REXX Batch file  |  1994-03-08  |  3KB  |  90 lines

  1. EXTPROC CEnvi
  2. //******************************************************************
  3. //*** DOS_Echo.cmd - Demonstration of DOS_Boss.lib.  This starts ***
  4. //*** ver.1          a DOS window and echos everything on it.    ***
  5. //******************************************************************
  6.  
  7. #include <PMdll.lib>
  8. #include <WinTools.lib>
  9. #include <ClipBrd.lib>
  10. #include <FileIO.lib>
  11. #include <NamePipe.lib>
  12. #include <DOS_Boss.lib>
  13.  
  14. DosSessionName = "DOS Echo Source";
  15.  
  16. // Start a DOS session in the background
  17. system("mode 80,26");
  18. system("start \"%s\" /WIN /DOS /B command.com /C mode 80,25",DosSessionName);
  19. //system("session /WIN /DOS /F /Title \"DOS Echo Source\" /SET DPMI_DOS_API=ENABLED command.com \"/K mode 80,25\"");
  20. suspend(3000);
  21.  
  22. printf("\nDOS_Echo has started a DOS windowed session named \"%s\"\n",DosSessionName);
  23. printf("DOS_Echo will now attempt to control that DOS session so that what you\n");
  24. printf("type HERE will be typed THERE, and what is displayed THERE will be\n");
  25. printf("displayed HERE.  The effect should be of a VERY SLOW DOS WINDOW.  For\n");
  26. printf("this illusion to work, this OS/2 has been set to 26 lines, and that DOS\n");
  27. printf("session is at 25 lines.  This will work best if that DOS session is visible\n");
  28. printf("and this OS/2 session remains in the foreground.\n");
  29. printf("\n");
  30. printf("You may edit that DOS window with keystrokes here, or keystrokes there.  But\n");
  31. printf("function keys will only be recognized THERE\n");
  32. printf("\n");
  33. printf("When \"%s\" is visible, press any key...",DosSessionName);
  34. getch();
  35. printf("\n");
  36.  
  37. DosWindowHandle = GetWindowHandle(DosSessionName);
  38. if ( NULL == DosWindowHandle ) {
  39.    printf("Could not locate DOS session named \"%s\"\n",DosSessionName);
  40.    abort();
  41. }
  42.  
  43. PasteToDOSWindow(DosWindowHandle,"ServeOS2 DOS_ECHO\r");
  44.  
  45. // initialize data to compare when it has changed
  46. PreviousData = "";
  47. PreviousLen = 0;
  48.  
  49. while ( IsWindow(DosWindowHandle) ) {
  50.  
  51.    // If keys are available, then send them to the window
  52.    if ( kbhit() ) {
  53.       KeysLen = 0;
  54.       do {
  55.          if ( 0 == (Keys[KeysLen] = byte(getch())) ) {
  56.             // extended key, so send any existing ascii string, then
  57.             // send just this extended key
  58.             if ( KeysLen ) {
  59.                Keys[KeysLen] = '\0';
  60.                SendDosKey("DOS_ECHO",Keys);
  61.             }
  62.             SendDosKey("DOS_ECHO",getch() << 8);
  63.             KeysLen = 0;
  64.          } else {
  65.             KeysLen++;
  66.          }
  67.       } while( kbhit() );
  68.       if ( KeysLen ) {
  69.          Keys[KeysLen] = '\0';
  70.          SendDosKey("DOS_ECHO",Keys);
  71.       }
  72.    }
  73.  
  74.    // Read the text in the window, if it has changed
  75.    Data = ReadDOSWindow(DosWindowHandle,DataLen);
  76.    if ( NULL != Data
  77.      && ( PreviousLen != DataLen || memcmp(Data,PreviousData,DataLen) ) ) {
  78.       Lines = CopyDOSBufferToLines(Data,LineCount);
  79.       for ( row = 0; row < 25; row++ ) {
  80.          ScreenCursor(0,row);
  81.          printf("%-80.80s",Lines[row]);
  82.       }
  83.       PreviousLen = DataLen;
  84.       PreviousData = Data;
  85.    }
  86.  
  87.    suspend(250);
  88.  
  89. }
  90.